home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / tex / texsrc.arc / TEX7.C < prev    next >
C/C++ Source or Header  |  1988-09-14  |  54KB  |  2,043 lines

  1. overlay "tex7"
  2. #define EXTERN extern
  3. #include "texd.h"
  4.  
  5. halfword zvsplit ( n , h ) 
  6. eightbits n ; 
  7. scaled h ; 
  8. {/* 10 30 */ register halfword Result; r_vsplit 
  9.   halfword v ; 
  10.   halfword p ; 
  11.   halfword q ; 
  12.   v = eqtb [ 4322 + n ] .hh .v.RH ; 
  13.   if ( curmark [ 3 ] != 0 ) 
  14.   {
  15.     deletetokenr ( curmark [ 3 ] ) ; 
  16.     curmark [ 3 ] = 0 ; 
  17.     deletetokenr ( curmark [ 4 ] ) ; 
  18.     curmark [ 4 ] = 0 ; 
  19.   } 
  20.   if ( v == 0 ) 
  21.   {
  22.     Result = 0 ; 
  23.     return(Result) ; 
  24.   } 
  25.   if ( mem [(long) v ] .hh.b0 != 1 ) 
  26.   {
  27.     {
  28.       if ( interaction == 3 ) 
  29.       wakeuptermin () ; 
  30.       printnl ( 133 ) ; 
  31.       print ( 206 ) ; 
  32.     } 
  33.     printesc ( 813 ) ; 
  34.     print ( 814 ) ; 
  35.     printesc ( 815 ) ; 
  36.     {
  37.       helpptr = 2 ; 
  38.       helpline [ 1 ] = 816 ; 
  39.       helpline [ 0 ] = 817 ; 
  40.     } 
  41.     error () ; 
  42.     Result = 0 ; 
  43.     return(Result) ; 
  44.   } 
  45.   q = vertbreak ( mem [(long) v + 5 ] .hh .v.RH , h , eqtb [ 5707 ] .cint ) ; 
  46.   p = mem [(long) v + 5 ] .hh .v.RH ; 
  47.   if ( p == q ) 
  48.   mem [(long) v + 5 ] .hh .v.RH = 0 ; 
  49.   else while ( true ) { 
  50.     if ( mem [(long) p ] .hh.b0 == 4 ) 
  51.     if ( curmark [ 3 ] == 0 ) 
  52.     {
  53.       curmark [ 3 ] = mem [(long) p + 1 ] .cint ; 
  54.       curmark [ 4 ] = curmark [ 3 ] ; 
  55.       mem [(long) curmark [ 3 ] ] .hh .v.LH = mem [(long) curmark [ 3 ] ] .hh .v.LH + 2 ; 
  56.     } 
  57.     else { 
  58.       deletetokenr ( curmark [ 4 ] ) ; 
  59.       curmark [ 4 ] = mem [(long) p + 1 ] .cint ; 
  60.       incr ( mem [(long) curmark [ 4 ] ] .hh .v.LH ) ; 
  61.     } 
  62.     if ( mem [(long) p ] .hh .v.RH == q ) 
  63.     {
  64.       mem [(long) p ] .hh .v.RH = 0 ; 
  65.       goto lab30 ; 
  66.     } 
  67.     p = mem [(long) p ] .hh .v.RH ; 
  68.   } 
  69.   lab30: ; 
  70.   q = prunepagetop ( q ) ; 
  71.   p = mem [(long) v + 5 ] .hh .v.RH ; 
  72.   freenode ( v , 7 ) ; 
  73.   if ( q == 0 ) 
  74.   eqtb [ 4322 + n ] .hh .v.RH = 0 ; 
  75.   else eqtb [ 4322 + n ] .hh .v.RH = vpackage ( q , 0 , 1 , 1073741823 ) ; 
  76.   Result = vpackage ( p , h , 0 , eqtb [ 5707 ] .cint ) ; 
  77.   return(Result) ; 
  78. printtotals () { r_printtotals 
  79.   printscaled ( pagesofar [ 1 ] ) ; 
  80.   if ( pagesofar [ 2 ] != 0 ) 
  81.   {
  82.     print ( 181 ) ; 
  83.     printscaled ( pagesofar [ 2 ] ) ; 
  84.     print ( 206 ) ; 
  85.   } 
  86.   if ( pagesofar [ 3 ] != 0 ) 
  87.   {
  88.     print ( 181 ) ; 
  89.     printscaled ( pagesofar [ 3 ] ) ; 
  90.     print ( 180 ) ; 
  91.   } 
  92.   if ( pagesofar [ 4 ] != 0 ) 
  93.   {
  94.     print ( 181 ) ; 
  95.     printscaled ( pagesofar [ 4 ] ) ; 
  96.     print ( 826 ) ; 
  97.   } 
  98.   if ( pagesofar [ 5 ] != 0 ) 
  99.   {
  100.     print ( 181 ) ; 
  101.     printscaled ( pagesofar [ 5 ] ) ; 
  102.     print ( 827 ) ; 
  103.   } 
  104.   if ( pagesofar [ 6 ] != 0 ) 
  105.   {
  106.     print ( 182 ) ; 
  107.     printscaled ( pagesofar [ 6 ] ) ; 
  108.   } 
  109. zfreezepagesp ( s ) 
  110. smallnumber s ; 
  111. {r_freezepagesp 
  112.   pagecontents = s ; 
  113.   pagesofar [ 0 ] = eqtb [ 5705 ] .cint ; 
  114.   pagemaxdepth = eqtb [ 5706 ] .cint ; 
  115.   pagesofar [ 7 ] = 0 ; 
  116.   pagesofar [ 1 ] = 0 ; 
  117.   pagesofar [ 2 ] = 0 ; 
  118.   pagesofar [ 3 ] = 0 ; 
  119.   pagesofar [ 4 ] = 0 ; 
  120.   pagesofar [ 5 ] = 0 ; 
  121.   pagesofar [ 6 ] = 0 ; 
  122.   leastpagecos = 1073741823 ; 
  123.  
  124. #ifdef STAT
  125.   if ( eqtb [ 5300 ] .cint > 0 ) 
  126.   {
  127.     begindiagnos () ; 
  128.     printnl ( 835 ) ; 
  129.     printscaled ( pagesofar [ 0 ] ) ; 
  130.     print ( 836 ) ; 
  131.     printscaled ( pagemaxdepth ) ; 
  132.     enddiagnosti ( false ) ; 
  133.   } 
  134. #endif /* STAT */
  135. zboxerror ( n ) 
  136. eightbits n ; 
  137. {r_boxerror 
  138.   error () ; 
  139.   begindiagnos () ; 
  140.   printnl ( 689 ) ; 
  141.   showbox ( eqtb [ 4322 + n ] .hh .v.RH ) ; 
  142.   enddiagnosti ( true ) ; 
  143.   flushnodelis ( eqtb [ 4322 + n ] .hh .v.RH ) ; 
  144.   eqtb [ 4322 + n ] .hh .v.RH = 0 ; 
  145. zensurevbox ( n ) 
  146. eightbits n ; 
  147. {r_ensurevbox 
  148.   halfword p ; 
  149.   p = eqtb [ 4322 + n ] .hh .v.RH ; 
  150.   if ( p != 0 ) 
  151.   if ( mem [(long) p ] .hh.b0 == 0 ) 
  152.   {
  153.     {
  154.       if ( interaction == 3 ) 
  155.       wakeuptermin () ; 
  156.       printnl ( 133 ) ; 
  157.       print ( 837 ) ; 
  158.     } 
  159.     {
  160.       helpptr = 3 ; 
  161.       helpline [ 2 ] = 838 ; 
  162.       helpline [ 1 ] = 839 ; 
  163.       helpline [ 0 ] = 840 ; 
  164.     } 
  165.     boxerror ( n ) ; 
  166.   } 
  167. zfireup ( c ) 
  168. halfword c ; 
  169. {/* 10 */ r_fireup 
  170.   halfword p, q, r, s ; 
  171.   halfword prevp ; 
  172.   quarterword n ; 
  173.   boolean wait ; 
  174.   integer savevbadness ; 
  175.   scaled savevfuzz ; 
  176.   halfword savesplittop ; 
  177.   if ( mem [(long) bestpagebrea ] .hh.b0 == 12 ) 
  178.   {
  179.     geqworddefin ( 5306 , mem [(long) bestpagebrea + 1 ] .cint ) ; 
  180.     mem [(long) bestpagebrea + 1 ] .cint = 10000 ; 
  181.   } 
  182.   else geqworddefin ( 5306 , 10000 ) ; 
  183.   if ( curmark [ 2 ] != 0 ) 
  184.   {
  185.     if ( curmark [ 0 ] != 0 ) 
  186.     deletetokenr ( curmark [ 0 ] ) ; 
  187.     curmark [ 0 ] = curmark [ 2 ] ; 
  188.     incr ( mem [(long) curmark [ 0 ] ] .hh .v.LH ) ; 
  189.     deletetokenr ( curmark [ 1 ] ) ; 
  190.     curmark [ 1 ] = 0 ; 
  191.   } 
  192.   if ( c == bestpagebrea ) 
  193.   bestpagebrea = 0 ; 
  194.   if ( eqtb [ 4577 ] .hh .v.RH != 0 ) 
  195.   {
  196.     {
  197.       if ( interaction == 3 ) 
  198.       wakeuptermin () ; 
  199.       printnl ( 133 ) ; 
  200.       print ( 206 ) ; 
  201.     } 
  202.     printesc ( 274 ) ; 
  203.     print ( 851 ) ; 
  204.     {
  205.       helpptr = 2 ; 
  206.       helpline [ 1 ] = 852 ; 
  207.       helpline [ 0 ] = 840 ; 
  208.     } 
  209.     boxerror ( 255 ) ; 
  210.   } 
  211.   insertpenalt = 0 ; 
  212.   savesplittop = eqtb [ 3536 ] .hh .v.RH ; 
  213.   r = mem [(long) memtop ] .hh .v.RH ; 
  214.   while ( r != memtop ) { 
  215.     if ( mem [(long) r + 2 ] .hh .v.LH != 0 ) 
  216.     {
  217.       n = mem [(long) r ] .hh.b1 ; 
  218.       ensurevbox ( n ) ; 
  219.       if ( eqtb [ 4322 + n ] .hh .v.RH == 0 ) 
  220.       eqtb [ 4322 + n ] .hh .v.RH = newnullbox () ; 
  221.       p = eqtb [ 4322 + n ] .hh .v.RH + 5 ; 
  222.       while ( mem [(long) p ] .hh .v.RH != 0 ) p = mem [(long) p ] .hh .v.RH ; 
  223.       mem [(long) r + 2 ] .hh .v.RH = p ; 
  224.     } 
  225.     r = mem [(long) r ] .hh .v.RH ; 
  226.   } 
  227.   q = memtop - 4 ; 
  228.   mem [(long) q ] .hh .v.RH = 0 ; 
  229.   prevp = memtop - 2 ; 
  230.   p = mem [(long) prevp ] .hh .v.RH ; 
  231.   while ( p != bestpagebrea ) { 
  232.     if ( mem [(long) p ] .hh.b0 == 3 ) 
  233.     {
  234.       r = mem [(long) memtop ] .hh .v.RH ; 
  235.       while ( mem [(long) r ] .hh.b1 != mem [(long) p ] .hh.b1 ) r = mem [(long) r ] .hh .v.RH ; 
  236.       if ( mem [(long) r + 2 ] .hh .v.LH == 0 ) 
  237.       wait = true ; 
  238.       else { 
  239.     wait = false ; 
  240.     s = mem [(long) p + 4 ] .hh .v.LH ; 
  241.     mem [(long) mem [(long) r + 2 ] .hh .v.RH ] .hh .v.RH = s ; 
  242.     s = mem [(long) r + 2 ] .hh .v.RH ; 
  243.     if ( mem [(long) r + 2 ] .hh .v.LH == p ) 
  244.     {
  245.       if ( mem [(long) r ] .hh.b0 == 1 ) 
  246.       if ( ( mem [(long) r + 1 ] .hh .v.LH == p ) && ( mem [(long) r + 1 ] .hh .v.RH 
  247.       != 0 ) ) 
  248.       {
  249.         while ( mem [(long) s ] .hh .v.RH != mem [(long) r + 1 ] .hh .v.RH ) s = mem [(long) 
  250.         s ] .hh .v.RH ; 
  251.         eqtb [ 3536 ] .hh .v.RH = mem [(long) p + 4 ] .hh .v.RH ; 
  252.         mem [(long) p + 4 ] .hh .v.LH = prunepagetop ( mem [(long) r + 1 ] .hh .v.RH ) 
  253.         ; 
  254.         if ( mem [(long) p + 4 ] .hh .v.LH != 0 ) 
  255.         {
  256.           tempptr = vpackage ( mem [(long) p + 4 ] .hh .v.LH , 0 , 1 , 
  257.           1073741823 ) ; 
  258.           mem [(long) p + 3 ] .cint = mem [(long) tempptr + 3 ] .cint + mem [(long) tempptr 
  259.           + 2 ] .cint ; 
  260.           freenode ( tempptr , 7 ) ; 
  261.           wait = true ; 
  262.         } 
  263.         mem [(long) s ] .hh .v.RH = 0 ; 
  264.       } 
  265.       mem [(long) r + 2 ] .hh .v.LH = 0 ; 
  266.       n = mem [(long) r ] .hh.b1 ; 
  267.       tempptr = mem [(long) eqtb [ 4322 + n ] .hh .v.RH + 5 ] .hh .v.RH ; 
  268.       freenode ( eqtb [ 4322 + n ] .hh .v.RH , 7 ) ; 
  269.       eqtb [ 4322 + n ] .hh .v.RH = vpackage ( tempptr , 0 , 1 , 
  270.       1073741823 ) ; 
  271.     } 
  272.     else { 
  273.       while ( mem [(long) s ] .hh .v.RH != 0 ) s = mem [(long) s ] .hh .v.RH ; 
  274.       mem [(long) r + 2 ] .hh .v.RH = s ; 
  275.     } 
  276.       } 
  277.       mem [(long) prevp ] .hh .v.RH = mem [(long) p ] .hh .v.RH ; 
  278.       mem [(long) p ] .hh .v.RH = 0 ; 
  279.       if ( wait ) 
  280.       {
  281.     mem [(long) q ] .hh .v.RH = p ; 
  282.     q = p ; 
  283.     incr ( insertpenalt ) ; 
  284.       } 
  285.       else { 
  286.     deletegluere ( mem [(long) p + 4 ] .hh .v.RH ) ; 
  287.     freenode ( p , 5 ) ; 
  288.       } 
  289.       p = prevp ; 
  290.     } 
  291.     else if ( mem [(long) p ] .hh.b0 == 4 ) 
  292.     {
  293.       if ( curmark [ 1 ] == 0 ) 
  294.       {
  295.     curmark [ 1 ] = mem [(long) p + 1 ] .cint ; 
  296.     incr ( mem [(long) curmark [ 1 ] ] .hh